home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / dev / lang / SmallEiffel.lha / SmallEiffel / lib_std / comparable.e < prev    next >
Text File  |  1998-12-22  |  3KB  |  118 lines

  1. -- This file is  free  software, which  comes  along  with  SmallEiffel. This
  2. -- software  is  distributed  in the hope that it will be useful, but WITHOUT 
  3. -- ANY  WARRANTY;  without  even  the  implied warranty of MERCHANTABILITY or
  4. -- FITNESS  FOR A PARTICULAR PURPOSE. You can modify it as you want, provided
  5. -- this header is kept unaltered, and a notification of the changes is added.
  6. -- You  are  allowed  to  redistribute  it and sell it, alone or as a part of 
  7. -- another product.
  8. --          Copyright (C) 1994-98 LORIA - UHP - CRIN - INRIA - FRANCE
  9. --            Dominique COLNET and Suzanne COLLIN - colnet@loria.fr 
  10. --                       http://www.loria.fr/SmallEiffel
  11. --
  12. deferred class COMPARABLE
  13.    --
  14.    -- All class handling COMPARABLE object with a total order relation
  15.    -- should inherit from this class.
  16.    --
  17.    
  18. feature 
  19.    
  20.    infix "<" (other: like Current): BOOLEAN is
  21.      -- Is `Current' strictly less than `other'?
  22.       require
  23.      other_exists: other /= Void
  24.       deferred
  25.       ensure
  26.      asymmetric: Result implies not (other < Current);
  27.       end;
  28.    
  29.    infix "<=" (other: like Current): BOOLEAN is
  30.      -- Is `Current' less or equal `other'?
  31.       require
  32.      other_exists: other /= Void
  33.       do
  34.      Result := not (Current > other)
  35.       ensure
  36.      definition: Result = (Current < other) or is_equal(other);
  37.       end;
  38.  
  39.    infix ">" (other: like Current): BOOLEAN is
  40.      -- Is `Current' strictly greater than `other'?
  41.       require
  42.      other_exists: other /= Void
  43.       do
  44.      Result := (other < Current)
  45.       ensure
  46.      definition: Result = (other < Current)
  47.       end;
  48.  
  49.    infix ">=" (other: like Current): BOOLEAN is
  50.      -- Is `Current' greater or equal than `other'?
  51.       require
  52.      other_exists: other /= Void
  53.       do
  54.      Result := not (Current < other)
  55.       ensure
  56.      definition: Result = (other <= Current)
  57.       end;
  58.    
  59.    in_range(lower, upper: like Current): BOOLEAN is
  60.          -- Return true if `Current' is in range [`lower'..`upper']
  61.       do
  62.      Result := (Current >= lower) and then (Current <= upper) 
  63.       ensure
  64.      Result = (Current >= lower and Current <= upper)
  65.       end;
  66.  
  67.    compare(other: like Current): INTEGER is
  68.      -- Compare `Current' with `other'.
  69.      -- `<'  <==> `Result < 0'
  70.      -- `>'  <==> `Result > 0'
  71.      -- Otherwise `Result = 0'.
  72.       require
  73.      other /= Void
  74.       do
  75.      if Current < other then
  76.         Result := -1
  77.      elseif other < Current then
  78.         Result := 1
  79.      end
  80.       ensure
  81.      (Result < 0) = (Current < other);
  82.      (Result = 0) = not (Current < other or Current > other);
  83.      (Result > 0) = (Current > other)
  84.       end;
  85.    
  86.    min(other: like Current): like Current is 
  87.      -- Minimum of `Current' and `other'.
  88.       require
  89.      other /= Void
  90.       do
  91.      if Current < other then
  92.         Result := Current
  93.      else
  94.         Result := other
  95.      end;
  96.       ensure
  97.      Result <= Current and then Result <= other;
  98.      compare(Result) = 0 or else other.compare(Result) = 0
  99.       end;
  100.  
  101.    max(other: like Current): like Current is 
  102.      -- Maximum of `Current' and `other'.
  103.       require
  104.      other /= Void
  105.       do
  106.      if other < Current then
  107.         Result := Current;
  108.      else
  109.         Result := other;
  110.      end;
  111.       ensure
  112.      Result >= Current and then Result >= other;
  113.      compare(Result) = 0 or else other.compare(Result) = 0
  114.       end;
  115.  
  116. end -- COMPARABLE
  117.  
  118.